#include "config.h"
#include "network.h"
#include "log.h"  
#include <stdio.h>
#include <string.h>


int main() {
    // 1. 加载配置
    const char *config_path = "conf/client.conf";
    ClientConfig config;
    if (load_client_config(config_path, &config) != 0) {
        fprintf(stderr, "错误：加载配置失败\n");
        client_log_write(config.log_file, "ERROR", "加载配置失败");
        return 1;
    }

    // 2. 初始化日志
    init_client_log(config.log_file);
    client_log_write(config.log_file, "INFO", "客户端启动");

    // 3. 连接服务器
    int sock_fd = connect_to_server(&config);
    if (sock_fd == -1) {
        client_log_write(config.log_file, "ERROR", "连接服务器失败");
        return 1;
    }
    client_log_write(config.log_file, "INFO", "成功连接服务器");

    //验证连接
    char conn_resp[128] = {0};
    ssize_t recv_len = recv_data(sock_fd, conn_resp, sizeof(conn_resp));
    if (recv_len <= 0) {
        fprintf(stderr, "连接被服务器拒绝：已达到最大连接数\n");
        client_log_write(config.log_file, "ERROR", "连接被服务器拒绝：已达到最大连接数");
        close(sock_fd);
        return 1;
    }

    // 5. 命令交互循环
    char input[1024] = {0};
    char response[2048] = {0};
    while (1) {
        printf("\n================ 学生信息管理系统 ================\n");
        printf("1. ADD        # 添加学生信息\n");
        printf("2. DELETE     # 删除学生信息\n");
        printf("3. UPDATE     # 修改学生信息\n");
        printf("4. SEARCH     # 查询学生信息\n");
        printf("5. SAVE       # 保存信息\n");
        printf("6. EXIT       # 退出系统\n");
        printf("\n=====================命令格式====================\n");
        printf("ADD [学号] [姓名] [性别] [年龄]\n");
        printf("DELETE [学号]\n");
        printf("UPDATE [旧学号] [新学号] [新姓名] [新性别] [新年龄]\n");
        printf("SEARCH [关键字]\n");
        printf("请输入命令：");

        fgets(input, sizeof(input), stdin);
        input[strcspn(input, "\n")] = '\0';

        if (strcmp(input, "EXIT") == 0) {
            client_log_write(config.log_file, "INFO", "用户执行EXIT命令");
            send_data(sock_fd, input);  // 发送EXIT给服务端
            break;
        }

        // 发送命令并记录日志
        if (send_data(sock_fd, input) != -1) {
            client_log_write(config.log_file, "INFO", "发送命令：");
            client_log_write(config.log_file, "INFO", input);
        } else {
            client_log_write(config.log_file, "ERROR", "发送命令失败");
            continue;
        }

        // 接收响应
        ssize_t recv_len = recv_data(sock_fd, response, sizeof(response));
        if (recv_len > 0) {
            printf("服务端响应：%s\n", response);
            client_log_write(config.log_file, "INFO", "收到服务端响应");
        } else {
            client_log_write(config.log_file, "ERROR", "接收响应失败");
            break;
        }
    }

    close(sock_fd);
    client_log_write(config.log_file, "INFO", "客户端退出，连接关闭");
    return 0;
}